// n个哲学家,每个人需要一个bowl和两个chopsticks
void wait();
void signal();
void wait(int i);
void signal(int i);
#define m 10
#define n 20 
using semophore=int;

semophore chopsticks[n];

//当n个哲学家中只有n-1个哲学家争抢筷子的时候，必然不会死锁
//所以n-1是同时用餐的上限
//bowl这个资源也是有上限的，而且被n-1约束，所以取最小值
semophore bowl=min(n-1,m);

void thread_person(int i){
    //思考
    wait(bowl);//取碗
    wait(chopsticks[i]);//取左边的筷子
    wait(chopsticks[(i+1)%n]);//取右边的筷子
    //吃饭
    signal(chopsticks[i]);//取左边的筷子
    signal(chopsticks[(i+1)%n]);//取右边的筷子
    signal(bowl);

}